home *** CD-ROM | disk | FTP | other *** search
/ Personal Computer World 2009 February / PCWFEB09.iso / Software / Resources / Chat & Communication / Digsby build 37 / digsby_setup.exe / lib / digsby / abstract_blob.pyo (.txt) < prev    next >
Python Compiled Bytecode  |  2008-10-13  |  4KB  |  122 lines

  1. # Source Generated with Decompyle++
  2. # File: in.pyo (Python 2.5)
  3.  
  4. import binascii
  5. from pyxmpp.xmlextra import get_node_ns_uri
  6. from pyxmpp.utils import to_utf8
  7. import libxml2
  8. from pyxmpp.iq import Iq
  9. from pyxmpp.xmlextra import common_doc
  10. import base64
  11. from pyxmpp.objects import StanzaPayloadObject
  12. MAX_BLOB_SIZE = int(196608 / 5)
  13. MAX_VARBINARY = 255
  14.  
  15. class AbstractBlob(StanzaPayloadObject):
  16.     xml_element_name = 'query'
  17.     
  18.     def __init__(self, xmlnode_or_time = None, data = None, rawdata = sentinel):
  19.         self._data = None
  20.         self.tstamp = None
  21.         self.update_needed = False
  22.         if isinstance(xmlnode_or_time, libxml2.xmlNode):
  23.             self._AbstractBlob__from_xml(xmlnode_or_time)
  24.         elif rawdata is not sentinel:
  25.             self.tstamp = xmlnode_or_time
  26.             self._data = rawdata
  27.         else:
  28.             self.tstamp = xmlnode_or_time
  29.             self.data = data
  30.  
  31.     
  32.     def __from_xml(self, node):
  33.         self.tstamp = None
  34.         AbstractBlob.set_data(self, None)
  35.         if node.type != 'element':
  36.             raise ValueError, 'XML node is not a %s (not en element)' % self.xml_element_namespace
  37.         
  38.         ns = get_node_ns_uri(node)
  39.         if ns or ns != self.xml_element_namespace or node.name != self.xml_element_name:
  40.             raise ValueError, 'XML node is not a %s' % self.xml_element_namespace
  41.         
  42.         n = node.children
  43.         while n:
  44.             if n.type != 'element':
  45.                 n = n.next
  46.                 continue
  47.             
  48.             ns = get_node_ns_uri(n)
  49.             if ns and ns != self.xml_element_namespace:
  50.                 n = n.next
  51.                 continue
  52.             
  53.             if n.name == 'data':
  54.                 AbstractBlob.set_data(self, base64.decodestring(n.getContent()))
  55.             elif n.name == 'time':
  56.                 self.tstamp = n.getContent()
  57.             elif n.name == 'update-needed':
  58.                 self.update_needed = True
  59.             
  60.             n = n.next
  61.  
  62.     
  63.     def complete_xml_element(self, xmlnode, _unused):
  64.         None if self.tstamp is not None else None
  65.         bytes = self._data
  66.         if bytes is not None:
  67.             xmlnode.newTextChild(None, 'data', binascii.b2a_base64(bytes))
  68.         
  69.  
  70.     
  71.     def __str__(self):
  72.         n = self.as_xml(doc = common_doc)
  73.         r = n.serialize()
  74.         n.unlinkNode()
  75.         n.freeNode()
  76.         return r
  77.  
  78.     
  79.     def set_data(self, data):
  80.         datalen = None if data is not None else 0
  81.         if datalen > MAX_BLOB_SIZE:
  82.             raise ValueError('Blob Size %d out of range 0 - %d.' % (datalen, MAX_BLOB_SIZE))
  83.         
  84.         self._data = data
  85.  
  86.     
  87.     def get_data(self):
  88.         return self._data
  89.  
  90.     
  91.     def del_data(self):
  92.         self._data = None
  93.  
  94.     data = property(get_data, set_data, del_data)
  95.     
  96.     def make_push(self, digsby_protocol):
  97.         iq = Iq(stanza_type = 'set')
  98.         iq.set_to(digsby_protocol.jid.domain)
  99.         self.as_xml(parent = iq.get_node())
  100.         return iq
  101.  
  102.     
  103.     def make_get(self, digsby_protocol):
  104.         iq = Iq(stanza_type = 'get')
  105.         iq.set_to(digsby_protocol.jid.domain)
  106.         self.as_xml(parent = iq.get_node())
  107.         return iq
  108.  
  109.  
  110.  
  111. class AbstractVarBinary(AbstractBlob):
  112.     
  113.     def set_data(self, data):
  114.         datalen = None if data is not None else 0
  115.         if datalen > MAX_VARBINARY:
  116.             raise ValueError('VarBinary Size %d out of range 0 - %d.' % (datalen, MAX_VARBINARY))
  117.         
  118.         self._data = data
  119.  
  120.     data = property(AbstractBlob.get_data, set_data, AbstractBlob.del_data)
  121.  
  122.